[アップデート] AWS Step Functions で変数が使えるようになりました
いわさです。
Step Functions を使っている全員がこれまで感じていたと思いますが、ステート間の値の引き渡し面倒でしたよね。頑張って出力に入れて...とか。
昨日、AWS Step Functions で変数が使えるようになったというアップデートがありました。
ステートマシンでは様々なタスクを組み合わせてワークフローを作成するのですが、前半のタスクの取得・処理結果を後半のタスクに引き渡したいことが必ず出てきます。
例えば以下のフローで Step1 の処理結果を Step5 で参照するためには、Step2、Step3、Step4 と引き継いでいく必要がありました。
画像引用元:https://docs.aws.amazon.com/step-functions/latest/dg/workflow-variables.html
今回のアップデートで変数がついに使えるようになり、例えば Step1 の結果を変数へ格納しておき、Step5 で参照するとか出来ます。非常に直感的です。中間データの引き渡し管理も不要です。
なお、アップデートアナウンスには JSONata のサポートも含まれています。
従来は JSONPath のみでしたが JSONata が使えるようになりました。ステートマシンのトップレベルで指定が必要です。
本記事では JSONata について掘り下げませんが、今回は JSONata をクエリ言語に指定しています。
使ってみる
Pass、Task、Map、Parallel、Choice、Wait で変数が使用出来ます。
次のように変数タブが追加されています。
JSON 形式で変数を指定します。数値を格納してみます。
中間のタスクはスキップして最後のタスクで最初に格納した変数を参照して出力してみます。
実行してみましょう。
値が出力されていますね。
また、マネジメントコンソールの実行結果確認画面では使用可能な変数、割り当てした変数も確認することが出来ます。
一度の変数割り当ての最大サイズは 256 KiB までとなっています。これは一度の JSON 変数設定時に複数フィールドを含む場合はそれが合算されます。
また、ステートマシンを通して保存された変数の合計サイズは 10 MiB までとなっています。
サイズに注意しましょう。
変数スコープ
使用可能な変数という概念の延長ですが、変数にはスコープがありまして利用にあたってこちらも意識が必要です。
例えば先程は最初に定義した変数を最後のタスクで参照することが出来ました。
では、次のように Parallel の中に含まれる個別のタスクで変数を割り当てするとどうでしょうか。
まず、個別のタスクは上位のタスクで定義した変数を参照することが出来ました。hoge1 です。
そして Parallel 内のタスクで hoge2 を定義してみます。
最後のタスクでこれがどうなるかというと、次のように参照が出来ません。
Parallel と Map の中で定義した変数はその内部でのみ参照が可能です。
必要な場合は出力を使って引き渡しすることを検討しましょう。
値の更新
変数は値の変更が可能です。
例えば先程のステートマシンで、変数定義の直後に値を更新するタスクを次のように追加してみます。
実行してみると割り当て時に元の変数を参照した上で値の更新を行うことが出来ました。
最終タスクから参照する際には次のように更新された値が参照出来るようになっています。
さいごに
本日は AWS Step Functions で変数が使えるようになったので使ってみました。
なお、今回のアップデートは従来の JSONPath も対象で、JSONPath の場合も変数は使用可能です。
ビジュアルエディター登場後に一気に普及した印象のある Step Functions ですが、それでも個人的には癖が強いなと思っていました。
今回の JSONata と変数のサポートでかなり直感的に設定出来るようになったと思います。
変数のサイズとスコープだけ注意し、ぜひ使ってみてください。